package xcmd

import (
	"strings"

	"gitee.com/xiaoyutab/xgotool/xerror"
)

// 获取文件类型
//
//	path	文件路径
//
//	uint8返回类型确定：
//	0-未知 1-目录 2-Linux可执行程序 3-Linux下超链接 4-Linux Socket文件 5-Windows 可执行程序
//	10-JPEG图片文件 11-PNG图片文件 12-WEBP格式图片 13-GIF格式图片 14-BMP位图 15-TIFF格式图片 19-未知格式图片文件
//	20-ASCII编码的文本文件 21-UTF-8编码的文本文件 29-未知格式文本文件
//	31-7Z压缩文件 32-ZIP压缩文件 39-未知压缩文件
//	41-PDF文档 42-Word文档 43-Excel文档 44-PPT文档
func File2type(path string) (uint8, error) {
	if is_windows {
		return 0, xerror.New("抱歉，此命令暂不支持运行在Windows平台下")
	}
	cmd, err := Exec(cmd_check[FILE].Path, path)
	if err != nil {
		return 0, err
	}
	cmd = strings.TrimSpace(strings.Split(cmd, ":")[1])
	if cmd == "directory" {
		return 1, nil
	}
	// 常见文件的类型
	headers := map[string]uint8{
		"ELF":                  2,  // Linux可执行程序
		"symbolic link":        3,  // Linux超链接
		"socket":               4,  // Linux Socket文件
		"PE32":                 5,  // Windows 可执行程序
		"JPEG":                 10, // JPEG图片文件
		"PNG":                  11, // PNG图片文件
		"GIF":                  13, // GIF格式图片
		"TIFF":                 15, // TIFF格式图片
		"ASCII":                20, // ASCII编码的文本文件
		"UTF-8":                21, // UTF-8编码的文本文件
		"7-zip":                31, // 7Z压缩文件
		"Zip":                  32, // ZIP压缩文件
		"PDF":                  41, // PDF文档
		"Microsoft Word":       42, // Word文档
		"Microsoft Excel":      43, // Excel文档
		"Microsoft PowerPoint": 44, // PPT文档
	}
	for i, v := range headers {
		if len(cmd) > len(i) && cmd[0:len(i)] == i {
			return v, nil
		}
	}
	// 不常见文件类型【依靠字符串搜索来确定是文本/图片等类型文件】
	headers = map[string]uint8{
		"text":        29, //文本文件
		"image":       19, // 图片文件
		"archive":     39, // 压缩文件
		"Web/P image": 12, // WEBP格式图片
		"PC bitmap":   14, // BMP位图
	}
	for i, v := range headers {
		if strings.Contains(cmd, i) {
			return v, nil
		}
	}
	return 0, nil
}
